package medOffice;

import java.util.Calendar;

import medOffice.Enuns.Sexo;

/**
 * Classe que inicializa um Paciente
 * 
 * @author Jose Amilton Filho - amiltonacioli@ibest.com.br
 * @version 1.0 - 03/12/2009
 */

public class Paciente extends Pessoa{
        private PlanoDeSaude planoDeSaude;
        
        /**
         * Construtor default da classe.
         */
        public Paciente() {
        	
        }
        
        /**
         * Construtor apenas com o nome
         * @param String nome
         * @throws Exception caso nao passe nos testes do verificador.
         */
        public Paciente(String nome) throws Exception {
        	setNome(nome);
        }

        
        /**
         * Construtor auxiliar
         * @param String nome
         * @param String cpf
         * @throws Exception caso nome ou cpf sejam invalidos
         */
        public Paciente(String nome, String cpf) throws Exception {
        	super(nome, cpf);
        }
        
        
        /**
         * Construtor auxiliar
         * @param String nome
         * @param String cpf
         * @param Enum Sexo
         * @throws Exception caso nome, sexo ou cpf sejam invalidos
         */
        public Paciente(String nome, String cpf, Sexo sexo) throws Exception {
        	super(nome, cpf);
        	setSexo(sexo);
        }
        
        
        /**
         * Contrutor auxiliar
         * @param String nome
         * @param String cpf
         * @param PlanoDeSaude planoDesaude
         * @throws Exception caso nome, cpf ou plano de saude sejam invalidos
         */
        public Paciente(String nome, String cpf, PlanoDeSaude planoDesaude) throws Exception{
            super(nome, cpf);
            this.planoDeSaude = planoDesaude;
        }
        
        /**
         * Construtor auxiliar
         * @param String nome
         * @param String cpf
         * @param PlanoDeSaude plano
         * @param Sexo sexo
         * @throws Exception caso nao passe nas condicoes basicas.
         */
        public Paciente(String nome, String cpf, PlanoDeSaude planoDesaude, Sexo sexo) throws Exception{
            super(nome, cpf);
            this.planoDeSaude = planoDesaude;
            setSexo(sexo);
    }
        
        /**
         * Construtor auxiliar
         * @param String nome
         * @param String cpf
         * @param String endereco
         * @param String telefone
         * @param Calendar dataNascimento
         * @param String email
         * @param Sexo sexo
         * @param PlanoDeSaude planoDeSaude
         * @throws Exception caso nao passe nas condicoes basicas.
         */
        public Paciente(String nome, String cpf, String endereco, String telefone,
            Calendar dataNascimento, String email, Sexo sexo,
            PlanoDeSaude planoDeSaude) throws Exception {
	        super(nome, cpf);
	        setEndereco(endereco);
	        setTelefone(telefone);
	        setDataDeNascimento(dataNascimento);
	        setEmail(email);
	        setSexo(sexo);
	        this.planoDeSaude = planoDeSaude;
	        }
        
        /**
         * Metodo acessador que retorna o plano de saude
         * @return PlanoDeSaude
         */
        public PlanoDeSaude getPlanoDeSaude(){
            return planoDeSaude;
        }
                
        /**
         * Metodo modificador que seta o plano de saude
         * @param PlanoDeSaude planoDesaude
         */
        public void setPlanoDeSaude(PlanoDeSaude planoDesaude) throws Exception{
            if (planoDesaude == null)
            	throw new Exception("Plano de Saude invalido");
        	this.planoDeSaude = planoDesaude;
        }
        

}

